package br.com.atenas.sigop.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.atenas.sigop.dto.RevistaDTO;

public class RevistaDAO {
	private String tabela = " SIGOP.TB005_REVISTA ";

	public void gravar(RevistaDTO revista, Connection conn) throws Exception{
		String sql = " INSERT INTO"+ tabela + "(NU_MATERIAL, DE_TITULO, DE_EDITORA, " +
		"DE_ESTADO, DE_OBSERVACAO, QTD_REVISTA)  VALUES (?,?,?,?,?,?)";
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		preecherPK(revista, conn);
		ps.setBigDecimal(index++, revista.getNuMaterial());
		ps.setString(index++, revista.getTitulo());
		ps.setString(index++, revista.getEditora());
		ps.setString(index++, revista.getEstado());
		ps.setString(index++, revista.getObservacao());
		ps.setBigDecimal(index++, revista.getQuantidade());
		ps.executeUpdate();
		ps.close();
		conn.close();
	}
	
	private void preecherPK (RevistaDTO revista, Connection conn)throws Exception{
		String sql = "select SQ005_REVISTA.nextval from dual";
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		rs.next();
		revista.setNuMaterial(rs.getBigDecimal(1));
	}
	
	public List<RevistaDTO> pesquisar(RevistaDTO revista, Connection conn) throws Exception{
		List<RevistaDTO> revistas = new ArrayList<RevistaDTO>();
		String sql = " SELECT NU_MATERIAL, DE_TITULO, DE_EDITORA, DE_ESTADO," +
				     " DE_OBSERVACAO, QTD_REVISTA FROM" + tabela +
					 " WHERE DE_TITULO LIKE ?";
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, revista.getTitulo()+"%");
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			RevistaDTO revistaResultado = new RevistaDTO();
			revistaResultado.setNuMaterial	(rs.getBigDecimal("NU_MATERIAL"));
			revistaResultado.setTitulo		(rs.getString("DE_TITULO"));
			revistaResultado.setEditora     (rs.getString("DE_EDITORA"));
			revistaResultado.setEstado		(rs.getString("DE_ESTADO"));
			revistaResultado.setObservacao	(rs.getString("DE_OBSERVACAO"));
			revistaResultado.setQuantidade	(rs.getBigDecimal("QTD_REVISTA"));
			revistas.add(revistaResultado);
		}
		return revistas;
	}

	public void alterar(RevistaDTO revista, Connection conn) throws Exception{
		
		String sql = "UPDATE" + tabela + "SET DE_TITULO = ?, DE_EDITORA = ?," +
					 " DE_ESTADO = ?, DE_OBSERVACAO = ?, QTD_REVISTA = ? WHERE NU_MATERIAL = ?";  
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setString(index++, revista.getTitulo());
		ps.setString(index++, revista.getEditora());
		ps.setString(index++, revista.getEstado());
		ps.setString(index++, revista.getObservacao());
		ps.setBigDecimal(index++, revista.getQuantidade());
		ps.setBigDecimal(index++, revista.getNuMaterial());
		ps.executeUpdate();
		ps.close();
	}

	public void excluir(RevistaDTO revista, Connection conn) throws Exception{
		
		String sql = "DELETE FROM" + tabela + "WHERE NU_MATERIAL = ?";
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setBigDecimal(index++, revista.getNuMaterial());
		ps.executeUpdate();
		ps.close();
	}
}